package comum.so;

import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.List;

import comum.rn.RNDescricaoSalaJogo;
import comum.rn.RNEstatisticas;
import comum.rn.RNInfoSalaJogo;
import comum.rn.RNJogada;
import comum.rn.RNPeca;
import comum.so.exception.SalaCheiaException;
import comum.so.exception.SalaComNomeJaExistenteException;
import comum.so.exception.SalaNaoExisteException;
import comum.so.exception.SenhaIncorretaException;

public interface SOClienteEntrada extends Remote {
	void deslogar() throws RemoteException;

	List<RNDescricaoSalaJogo> buscarSalasJogo(boolean mostrarCheios,
			boolean mostrarSenha) throws RemoteException;

	void entrarSalaJogo(Long idSalaJogo, String senha) throws RemoteException,
			SalaCheiaException, SalaNaoExisteException, SenhaIncorretaException;

	void criarSalaJogo(String nome, String senha) throws RemoteException,
			SalaComNomeJaExistenteException;

	RNEstatisticas obterEstatisticas() throws RemoteException;

	void sairSalaEspera(Long idSalaJogo) throws RemoteException;

	boolean entrarMesa(int posicaoDesejada, Long idSalaJogo)
			throws RemoteException;

	void sairMesa(Long idSalaJogo) throws RemoteException;

	void fazerJogada(Long idSalaJogo, RNJogada jogada) throws RemoteException;

	void informarSaidaJogador(String jogadorQueSaiu, RNInfoSalaJogo infoSalaJogo)
			throws RemoteException;

	void informarMudancaMesa(Integer[] posicoesMesa) throws RemoteException;

	void informarJogada(String jogadorQueJogou, RNJogada jogada,
			String novoJogadorEmTurno) throws RemoteException;

	void informarInicioPartida(List<RNPeca> pecas, String primeiroAJogar)
			throws RemoteException;

	void informarFimPartida(String mensagem) throws RemoteException;

	void informarFechamentoServidor() throws RemoteException;

	void desistirJogo(Long idSalaJogo) throws RemoteException;

	void iniciarPartida(String identicadorAdministrador, Long idSalaJogo)
			throws RemoteException;

	void informarEntradaJogador(String jogadorQueEntrou,
			RNInfoSalaJogo infoSalaJogo) throws RemoteException;

	String getIdentificador() throws RemoteException;

	void abrirSalaPrincipal() throws RemoteException;

}
